iT邦幫忙

2026 iThome 鐵人賽

DAY 1
0
Software Development

SAMRT on FHIR 開發之路系列 第 1

Day01 - 為什麼是 SMART on FHIR

  • 分享至 

  • xImage
  •  

火線超人的故事,要從衛福部電子病歷格式轉向說起。在衛福部資訊處李建璋處長上任後,為了解決台灣 HIS 長年各自為政的孤島效應,把方向盤轉向 HL7 FHIR 與 SMART on FHIR,甚至把 SMART on FHIR 的創辦人請來台灣。這個動向我一直有在關注,走到這一步,大概就嗅到味道了:這一次不是口號,是玩真的。

真正讓我心動的是技術本身。FHIR 不挑程式語言,Java、C#、JavaScript、Ruby 都有現成的函式庫;生態系裡的伺服器和工具,幾乎個個都是 Docker 一鍵完成。我越看越眼熟:容器化、開放標準、模組化,這不就是我天天在用的那套積木嗎?原來自己熟悉的技術路線,跟國際醫療標準的走向,是同一條路。這條路,怎麼看都走得通。

後來,第一屆 FHIR 台灣 50 登場,號稱「醫療界的 0050」,要選出五十個代表性的 FHIR 應用。這個外號取得真的是好:0050 挑的是台灣最有代表性的五十家公司,台灣 50 要挑的是最有代表性的五十個 FHIR 實作。我想,與其在腦子裡空轉,不如把想法做出來投稿,看看自己的東西符不符合世界標準、能不能接上醫界的期待。於是有了火線超人。取這個名字的時候我自己得意了很久:FHIR 的官方發音就是 fire,中文取「火」;串接的通路是 LINE,取「線」。合在一起,火線超人,一個住在 LINE 裡的 FHIR 應用,病人打開聊天視窗就能查自己的就醫資料、看診進度、健康報告。後來它成了第一屆台灣 50 的優良得主。

得獎當然開心,但回頭看,過程中累積的東西比獎座實用多了:OAuth 授權怎麼接、多家醫院的伺服器怎麼管、病人身分怎麼綁,這些問題的答案現在都散落在專案的規格和程式碼裡。這個系列就是把這條路重新走一遍,整理成 30 篇,讓下一個想做 SMART app 的人少走一點冤枉路。

醫療資料的那座高牆

先講一下為什麼這件事值得做。

在醫院工作久了的人,大概都同意:病人的資料,常常出不了醫院的門。換一家醫院看診,檢驗重新來一次;想整理自己的健康紀錄,得在各家醫院的 app 和網站之間當人肉搬運工。這不是哪家醫院故意刁難,而是各家 HIS 長年各自發展,資料格式、介接方式通通不一樣,系統之間根本沒有共同語言。

這道牆擋住的不只是病人,還有開發者。就算你有本事寫出很棒的健康管理 app,光是面對每家醫院都不同的介接規格,串接成本就足以讓專案在簡報階段直接陣亡。

FHIR 與 SMART 各自解決什麼

這幾年國際的解法,就是這個系列的兩位主角。

FHIR(Fast Healthcare Interoperability Resources)解決「資料長什麼樣、怎麼拿」。它把醫療資料定義成一個個標準的 Resource,像 Patient、Observation、Condition,而且用大家熟悉的 RESTful API 存取。對 web 開發者來說,呼叫 FHIR API 的手感跟呼叫任何一個 JSON API 沒兩樣。你甚至可以把 FHIR server 直接當成一個醫療專用的資料庫:資料表(Resource 的結構)和查詢介面都標準化了,只是查詢語言從 SQL 換成 HTTP。

SMART on FHIR 解決「app 怎麼安全地掛上去」。它站在 OAuth 2.0 與 OpenID Connect 的肩膀上,規範 app 怎麼請求授權、怎麼知道「現在在看哪位病人」、怎麼用最小權限拿資料。

我喜歡用插座來比喻,如果 FHIR 是電力規格,SMART 就是插座的形狀。兩個都標準化之後,寫 app 就像設計電器,不用為每一棟房子客製插頭,走到哪插到哪。在美國,標準化 FHIR API 與 SMART App Launch 已經進入 EHR 認證與合規要求,一個 app 寫一次,理論上就能在不同的醫療系統上跑。

在台灣,健保署與各醫院近兩年也陸續在推 FHIR,台灣 50 優良 SMART app 徵案這樣的活動就是生態系的起步。現在進場,時間點應該剛好。

這個系列要帶你走的路

開始之前,有些事情要先講清楚。SMART on FHIR 指的是授權與啟動框架,但一個 app 要真的能用,還有資料呈現、多伺服器管理、部署上線等一大串。所以這個系列談的是廣義的 SMART on FHIR 應用開發:以 SMART 標準為核心,順便講一下,做一個真實醫療 app 會遇到哪些事。

我把 30 天分成五部分:

範圍 內容
一、緣起 day01 到 day04 背景知識與開發環境
二、SMART 核心 day05 到 day14 授權框架完整拆解
三、做出有用的 app day15 到 day22 臨床資料的讀寫與呈現
四、真實世界的坑 day23 到 day27 多租戶、病歷整合、生態與安全
五、上線與展望 day28 到 day30 部署、回顧與下一步

兩件事先說明。第一,火線超人是用 Ruby on Rails 寫的,但系列範例會用 JS/TS 搭配公開 sandbox,你不需要會 Rails,也不需要 LINE 帳號,有瀏覽器和編輯器就能跟上。火線超人的實作會以經驗談的形式出現,當作真實世界的對照組。第二,每篇都有「跟著做」段落,我的經驗是 SMART 的觀念用讀的很抽象,親手跑過一次授權流程,很多東西自然就通了。

跟著做:先逛一圈 SMART 的世界

第一天不寫程式,先逛一下建立手感。請打開瀏覽器做這兩件事:

  1. SMART App Gallery(apps.smarthealthit.org),這裡收錄了世界各地的 SMART app。隨便挑兩三個點進去看,注意它們的共同點:都宣稱可以跑在不同的電子病歷系統上。這就是標準化的威力。

SMART App Gallery 首頁,左側是應用類型與分類篩選,右側列出 Featured Apps
https://ithelp.ithome.com.tw/upload/images/20260801/201833988W9bxVFW7J.png

  1. SMART Health IT Launcher(launch.smarthealthit.org),我們接下來一個月最重要的練習場,一個模擬電子病歷環境的公開 sandbox。今天不用操作,看一眼首頁大概喵幾眼就好。

SMART Launcher 首頁,可以設定 Launch Type、FHIR 版本、模擬的病人與醫師,最下面填入 app 的 Launch URL
https://ithelp.ithome.com.tw/upload/images/20260801/20183398NUNB5KeLzw.png

逛完心裡大概就會有個底:這個生態系已經很多人在蓋房子,我們接下來要學的,就是蓋房子的方法。

小結

今天聊了三件事:醫療資料的高牆、FHIR 與 SMART 這對搭檔,還有整個系列的地圖。故事從台灣 50 和火線超人開始,但這個系列真正想做的,是讓更多人有能力做出下一個火線超人。

明天把地圖攤開,看清楚 FHIR、SMART、OAuth 2.0、OpenID Connect 這幾個名詞到底誰管誰,先把方位認熟,後面 30 天才不會迷路。


系列文
SAMRT on FHIR 開發之路1
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言